package ch9;

public class ObjectClass {

	public static void main(String[] args) {
		
		//新建三个字符串，并判断其是否相同
		//字符串的创建有两种方法
		String s1 = "abc";
		
		String s2 =  new String("abc");

		String s3 = new String("abc");
		
		String s4 = "abc";
		
		System.out.println(s1==s2);
		System.out.println(s2==s3);
		System.out.println(s1==s4);
		System.out.println("============================");
		// ==运算符号在判断对象（引用数据类型）时，它的功能是判断两个对象的地址是否相同
		//常量池：常量池是java语言提供的一种特殊的内存结构，用于储存程序运行过程中的常量，可以储存常量对象
		
		String s5 = "abcd";//字符串在储存时都会在常量池中进行保存，每个不同的字符串都会有自己的储存空间
		//s4 = "abcdef";
		
		//判断两个对象的数据值是否相等，即判断两个对象是否同一个对象应该使用equals方法
		//equals方法时java.lang.Object类提供的方法，用于判断两个对象是否为同一个对象（或某些对象的值是否相等）
		//String类重写了equals方法
		System.out.println(s1.equals(s2));
		System.out.println(s2.equals(s3));
		System.out.println(s1.equals(s4));
		System.out.println("=================================");
		
		Student student1 = new Student(1001,"jack");
		Student student2 = new Student(1001,"jack");
		Student student3 = student1;
		System.out.println(student1==student2);
		System.out.println(student1.equals(student2));
		System.out.println("=================================");
		
		
		System.out.println(student1==student3);
		System.out.println(student1.equals(student3));
		System.out.println("================================");
		
		//hashCode哈希码，哈希码是通过哈希算法为每一个对象计算出的唯一值；即每个对象的哈希值都是不同的
		//equals方法默认的判定就是判断两个对象的哈希值是否相同；故equals方法默认判断的是两个对象的引用是否指向同一个对象
		System.out.println(student1.hashCode());
		System.out.println(student2.hashCode());
		System.out.println(student3.hashCode());
		
		//当使用输出语句输出一个对象，默认会调用该对象的toString方法吧对象转换成字符串进行输出
		//默认输出对象的：类名@hashcode（使用16进制表示）
		//如果需要输出对象的数据，需要重写toString方法
		System.out.println(student1+","+student1.toString());
		System.out.println(student1);

	}

}
